Шаг 6. Переключаемся на удалённую ветку

Это редкий кейс, и про него немногие знают. Дело в том, что с приходом команды git pull переключаться на удалённую ветку нет смысла. Но мы всё равно в образовательных целях расскажем про это, чтобы вы понимали, что такая возможность есть.

Обычно потребность в переключении на удалённую ветку появляется, когда разработчики используют команду git fetch. Если говорить официальным языком, данная команда синхронизирует локальные и удалённые ссылочные объекты. Простыми словами, она лишь затягивает изменения с удалённой ветки, но при этом не обновляет рабочую копию. Чтобы её обновить, нужно использовать git merge.

Про git fetch мы подробно поговорим в восьмом разделе.

Чтобы посмотреть, какие изменения были затянуты, порой нужно перейти на удалённую ветку — именно туда они и затягиваются. Это можно сделать несколькими способами:

  • через команду git checkout <название-ветки>;
  • через git switch --detach <название-ветки>.

Для начала посмотрим с помощью команды git branch -r удалённые ветки.

Введена команда git branch -r
Введена команда git branch -r

Для нас доступна только одна удалённая ветка — origin/main. На неё мы и будем переключаться с помощью команды git switch --detach origin/main.

Введена команда git switch --detach origin/main
Введена команда git switch --detach origin/main

После переключения на удалённую ветку Git выдал сообщение, что указатель HEAD установлен на последний коммит с хэшем e6d675c. Как видим, вместо нормального названия origin/main в синих скобках установлен сокращённый хэш последнего коммита.

Опция --detach отвечает за переход в состояние detached HEAD. В этом состоянии указатель HEAD ссылается на последний коммит (в данном случае), а не на ветку. Поэтому Git и вывел такое сообщение после использования команды с опцией --detach.

Но зачем нам это состояние и в чём его суть? Мы находимся в ветке удалённого репозитория, а не локального. И если мы сейчас начнём вносить изменения и делать коммиты в ней, то они не сохранятся при повторном использовании команды git fetch. Если углубляться в теорию, то в скрытой директории .git есть ещё одна директория origin с вложенным файлом main, то есть названием нашей ветки. В данном файле сейчас находится хэш коммита, на который указывает ветка origin/main. Так вот, при повторном использовании команды git fetch данный хэш перезапишется, если на ветке удалённого репозитория существуют коммиты, которых нет в локальном репозитории. После этого все коммиты, которые вы сделали самостоятельно на этой ветке, в локальном репозитории будут удалены. Поэтому вносить какие-то изменения и делать коммиты в ней не имеет смысла.

Вернёмся назад на локальную ветку с помощью команды git switch -.

Введена команда git switch -
Введена команда git switch -

Возможно, у вас сейчас появилось ощущение, будто вы открыли книгу на 500 странице и ничего не поняли. Ничего страшного. Просто воспринимайте этот материал как интересное чтиво. Запишите команды и отложите их до лучших времён. Когда появится задача с переключением на удалённую ветку или вы захотите использовать git fetch, то откроете их и сразу вспомните, как и что делать.